package util.datastructure;

import com.sun.org.apache.xerces.internal.impl.dv.ValidatedInfo;

import util.LogUtils;




/**
 * 链表节点
 * @author Administrator
 *
 */
public class ListNode {
    public int val;
    public ListNode next;
    public ListNode() {}
    public ListNode(int x) { val = x; }
    public ListNode(int x, ListNode next) { val = x; this.next = next;}
	@Override
	public String toString() {
		return "ListNode [val=" + val + ", next=" + next + "]";
	}
	
	
	/*
	 * new
	 * 
	 */
	public static ListNode newLinkListOrdered() {
		ListNode root = new ListNode(1);
		root.next = new ListNode(2);
		root.next.next = new ListNode(3);
		root.next.next.next = new ListNode(4);
		root.next.next.next.next = new ListNode(5);
		root.next.next.next.next.next = new ListNode(6);
		root.next.next.next.next.next.next = new ListNode(7);
		return root;
	}
	
	
	public static ListNode newLinkListNotOrder() {
		ListNode root = new ListNode(2);
		root.next = new ListNode(4);
		root.next.next = new ListNode(6);
		root.next.next.next = new ListNode(7);
		root.next.next.next.next = new ListNode(1);
		root.next.next.next.next.next = new ListNode(8);
		root.next.next.next.next.next.next = new ListNode(5);
		return root;
	}
	
	
	public static ListNode newLinkList2() {
		ListNode root = new ListNode(7);
		root.next = new ListNode(8);
		root.next.next = new ListNode(9);
		root.next.next.next = new ListNode(10);
		root.next.next.next.next = new ListNode(11);
		return root;
	}
	
	public static ListNode newLinkListIn_086() {
		ListNode root = new ListNode(1);
		root.next = new ListNode(1);
		return root;
	}
	
	
	
	public static ListNode newPalindromeLinkList() {
		ListNode root = new ListNode(1);
		root.next = new ListNode(2);
		root.next.next = new ListNode(3);
		root.next.next.next = new ListNode(2);
		root.next.next.next.next = new ListNode(1);
		root.next.next.next.next.next = new ListNode(1);
		return root;
	}
	
	public static ListNode newLinkListWithDuplicatesElements() {
		ListNode root = new ListNode(1);
		root.next = new ListNode(2);
		root.next.next = new ListNode(3);
		root.next.next.next = new ListNode(3);
		root.next.next.next.next = new ListNode(4);
		root.next.next.next.next.next = new ListNode(4);
		root.next.next.next.next = new ListNode(5);
		return root;
	}
	
	/**
	 * 两个节点值交换
	 * @param head
	 */
	public static void exchangeVal(ListNode node1, ListNode node2) {
		int temp;
		temp      = node1.val;
		node1.val = node2.val;
		node2.val = temp;
    }
	
	/**
	 * 遍历
	 * @param head
	 */
	public static void traverse(String tag, ListNode head) {
    	LogUtils.println(tag);
    	while (head != null) {
    		LogUtils.print(head.val);
    		head = head.next;
    	}
    	LogUtils.br();
    }

}
